O Ecossistema HIP é arquitetado como uma camada de abstração leve projetada para compatibilidade de código-fonte entre arquiteturas AMD e NVIDIA. Ele utiliza o ROCm (Radeon Open Compute) pilha, especificamente utilizando o Arquitetura de Sistema Heterogêneo (HSA) tempo de execução e o Driver de Fusão de Núcleos (KFD).
1. Inicialização de Arranque
A inicialização começa com trocas de mensagens de baixo nível entre drivers de kernel via hsa_init(0, ...) e hsaKmtOpenKFD(...). Essas chamadas de estabelecimento criam a ponte de comunicação entre aplicações no espaço de usuário e o hardware da GPU AMD.
2. Descoberta de Topologia e Propriedades
Antes de iniciar núcleos, o tempo de execução identifica as capacidades do hardware usando hsaKmtAcquireSystemProperties e hsaKmtGetNodeProperties. Ele mapeia a memória física para nós da GPU usando hsaKmtMapMemoryToGPUNodes, garantindo visibilidade da tabela de páginas para o dispositivo.
3. A Pipeline de Compilação
A ponte entre CUDA e HIP é construída sobre dois pilares: hipify-perl (transpilador baseado em expressões regulares) e hipcc (envoltório de compilador).
hipify-perl square.cu > square.cpp
hipcc square.cpp -o square.out
4. Lógica de Versão
A compatibilidade é garantida por meio de uma fórmula precisa para assegurar que hipRuntimeGetVersion esteja alinhado com as tabelas de extensão HSA:
$$\text{HIP\_VERSION} = \text{MAIOR} \times 10^7 + \text{MENOR} \times 10^5 + \text{CORREÇÃO}$$